//只要前面这个点与其他点构成过一个环， 就不能再与其他点构成环
//只能崇拜一个人,出路1条,环1个
#include<bits/stdc++.h>
using namespace std;
#define sd(n) scanf("%d",&n) 
#define pd(n) printf("%d", (n))
const int N=1e5+5;
int a[N],b[N],n,res;//b[i]数组用来存dfs时到i点共走了多少个点
bool st[N];
void dfs(int u,int num)
{
    if(st[u])//此时构成环路
    {
        res=max(num-b[u],res);//num-b[u]为环路中点的个数
        return ;
    }
    b[u]=num;
    st[u]=true;
    dfs(a[u],num+1);
}
int main()
{
    sd(n);
    for(int i=1;i<=n;i++) sd(a[i]);
    for(int i=1;i<=n;i++) 
        if(!st[i]) dfs(i,1);//每次dfs搜索完从i点出发的环，并且标记路径上的点
    pd(res);

    return 0;
}